#define _CRT_SECURE_NO_WARNINGS
#include"Stack.h"
//void Test() {
//	ST* s = NULL;
//	StackPush(&s, 1);
//	StackPush(&s, 2);
//	STDataType  n = StackTop(s);
//	printf("%d ", n);
//	StackPop(&s);
//	StackPush(&s, 3);
//	StackPush(&s, 4);
//	  n = StackTop(s);
//	printf("%d ", n);
//	StackPop(&s);
//	StackPush(&s, 5);
//	printf("%d\n", StackSize(s));
//	while (s) {
//		  n=	StackTop(s);
//		printf("%d ", n);
//		StackPop(&s);
//	}
//	printf("\n");
//	if (StackEmpty(s))
//		printf("NULL");
//}
//int main() {
//	Test();
//	return 0;
//}
bool test1() {
	int arr[1000] = { 0 }, n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%d", &arr[i]);
	ST* s=NULL;
	int j = 1;
	int t = 0;
	while (j <= n) {
		StackPush(&s, j);
		if (j == arr[t]) {
			StackPop(&s);
			t++;
		}
		j++;
	}
	while (t < n) {
		STDataType te = StackTop(s);
		if (te == arr[t]) {
			StackPop(&s);
			t++;
		}
		else {
			break;
		}
	}
	bool pd = StackEmpty(s);
	return pd;
}

int main() {
	if (test1())
		printf("YES\n");
	else
		printf("NO\n");
	return 0;
}